<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

/**
 * Description of Juego
 *
 * @author Jose
 */
require_once(getcwd()."/Controlador/utils.php");
require_once(getcwd()."/Modelo/bd/bd.php");
class Juego {
    static function grabarJuego($nombre,$estado,$fecha_inicio,$fecha_fin,$monto_inicial,$tipo_cambio,
            $porcentaje_venta,$texto_web,$id) {
        if($id=="") {
            $query="insert into juego (nombre,estado,fecha_inicio,fecha_fin,monto_inicial,tipo_cambio,porcentaje_venta,texto_web)
        values ";
            $campos=array(
                    array("tipo"=>"string","valor"=>mysql_escape_string($nombre)),
                    array("tipo"=>"string","valor"=>mysql_escape_string($estado)),
                    array("tipo"=>"string","valor"=>mysql_escape_string(obtenerFormatoFechaBD($fecha_inicio))),
                    array("tipo"=>"string","valor"=>mysql_escape_string(obtenerFormatoFechaBD($fecha_fin))),
                    array("tipo"=>"numero","valor"=>mysql_escape_string($monto_inicial)),
                    array("tipo"=>"numero","valor"=>mysql_escape_string($tipo_cambio)),
                    array("tipo"=>"numero","valor"=>mysql_escape_string($porcentaje_venta)),
                    array("tipo"=>"string","valor"=>mysql_escape_string(htmlspecialchars($texto_web))),
            );
            $id=BD::ejecutarQuery($query,$campos);
        }
        else {
            $query="update juego set ";
            $campos=array(
                    array("tipo"=>"string","nombre"=>"nombre","valor"=>mysql_escape_string($nombre)),
                    array("tipo"=>"string","nombre"=>"estado","valor"=>mysql_escape_string($estado)),
                    array("tipo"=>"string","nombre"=>"fecha_inicio","valor"=>mysql_escape_string(obtenerFormatoFechaBD($fecha_inicio))),
                    array("tipo"=>"string","nombre"=>"fecha_fin","valor"=>mysql_escape_string(obtenerFormatoFechaBD($fecha_fin))),
                    array("tipo"=>"numero","nombre"=>"monto_inicial","valor"=>mysql_escape_string($monto_inicial)),
                    array("tipo"=>"numero","nombre"=>"tipo_cambio","valor"=>mysql_escape_string($tipo_cambio)),
                    array("tipo"=>"numero","nombre"=>"porcentaje_venta","valor"=>mysql_escape_string($porcentaje_venta)),
                    array("tipo"=>"string","nombre"=>"texto_web","valor"=>mysql_escape_string(htmlspecialchars($texto_web))),
            );
            
            $where=" where idjuego=$id";
            BD::ejecutarQueryUpdate($query,$campos,$where);

        }
        if ($id and $id!="")
            return array("idjuego"=>$id,"nombre"=>$nombre,"estado"=>$estado,"fecha_inicio"=>$fecha_inicio,"fecha_fin"=>$fecha_fin,
                    "monto_inicial"=>$monto_inicial,"tipo_cambio"=>$tipo_cambio,"porcentaje_venta"=>$porcentaje_venta,"texto_web"=>$texto_web);
        else return false;

    }
    static function buscarJuegos() {

        $query="select j.idjuego, nombre, date_format(fecha_inicio,'%d/%m/%Y') as fecha_inicio,
        date_format(fecha_fin,'%d/%m/%Y') as fecha_fin, j.estado, count(jj.idjugador_x_juego) as num_jugadores
        from juego j  left join jugador_x_juego jj on jj.idjuego=j.idjuego  where j.estado!='eliminado'";
        $fecha_desde=isset($_REQUEST['fecha_desde'])?$_REQUEST['fecha_desde']:'';
        $fecha_hasta=isset($_REQUEST['fecha_hasta'])?$_REQUEST['fecha_hasta']:'';
        if ($fecha_desde!="" and !formatoFecha($fecha_desde))
            $errores[]="Fecha desde Inválida";
        if ($fecha_hasta!="" and !formatoFecha($fecha_hasta))
            $errores[]="Fecha hasta Inválida";
        $fecha_desde=obtenerFormatoFechaBD($fecha_desde);
        $fecha_hasta=obtenerFormatoFechaBD($fecha_hasta);
        if (isset($_REQUEST['nombre']) )
            $query.=" and j.nombre like '%".mysql_escape_string($_REQUEST['nombre'])."%'";
        if ($_REQUEST['fecha_desde']!="" and $_REQUEST['fecha_hasta']!="")
            $query.=" and j.fecha_inicio between '".mysql_escape_string($fecha_desde)."' and '".
            mysql_escape_string($fecha_hasta)."'";
        else
        if ($_REQUEST['fecha_hasta']!="")
            $query.=" and fecha <= '".mysql_escape_string($fecha_hasta)."' ";
        else
        if ($_REQUEST['fecha_desde']!="")
            $query.=" and fecha >= '".mysql_escape_string($fecha_desde)."' ";
        $query.=" group by j.idjuego";

        return $query;
    }
    static function verJuego($id) {
        $query="select j.idjuego, nombre, date_format(fecha_inicio,'%d/%m/%Y') as fecha_inicio,
        date_format(fecha_fin,'%d/%m/%Y') as fecha_fin, j.estado, j.monto_inicial, j.tipo_cambio, porcentaje_venta, texto_web
        from juego j  where j.idjuego=".mysql_escape_string($id);

        return BD::ejecutarQuerySelectUnitario($query);
    }
    static function verCotizaciones($idjuego) {
        $query="select a.empresa, c.idcotizacion, c.valor, date_format(c.fecha,'%d/%m/%Y') as fecha, c.ticker, a.moneda
        from cotizacion c
        left join accion a on a.ticker=c.ticker
        left join juego j on j.idjuego=".mysql_escape_string($idjuego).
        " where c.fecha between j.fecha_inicio and j.fecha_fin and a.estado='activo' and c.valor is not null

        order by empresa asc, ticker asc, fecha;";
        $cotizaciones= BD::ejecutarQuerySelect($query);
        $cotizaciones_return=array();
        foreach($cotizaciones as $cotizacion) {
            $cotizaciones_return[htmlentities($cotizacion['empresa'])." - ".$cotizacion['ticker']]['ticker']=$cotizacion['ticker'];
            $cotizaciones_return[htmlentities($cotizacion['empresa'])." - ".$cotizacion['ticker']]['moneda']=$cotizacion['moneda'];
            $cotizaciones_return[htmlentities($cotizacion['empresa'])." - ".$cotizacion['ticker']]['fechas'][$cotizacion['fecha']]=$cotizacion['valor'];
        }
        return $cotizaciones_return;

    }
    static function verDias($idjuego) {
        $query="select j.fecha_inicio, j.fecha_fin,
    datediff(j.fecha_fin, j.fecha_inicio) as numdias from juego j where j.idjuego=".mysql_escape_string($idjuego);
        $dias=BD::ejecutarQuerySelectUnitario($query);
        $diasreturn=array();
        
        $fecha = new DateTime($dias['fecha_inicio']);
        $numdias=$dias['numdias'];
        if ($fecha->format("D")!="Sat" and $fecha->format("D")!="Sun")
            $diasreturn[]=date_format($fecha,"d/m/Y");
        for($i=1;$i<=$numdias;$i++) {            
            $fecha->modify('+1 day');            
            if ($fecha->format("D")!="Sat" and $fecha->format("D")!="Sun")
               $diasreturn[]=$fecha->format("d/m/Y");
        }
        
        return $diasreturn;

    }
    static function obtenerInsertCotizacion($arreglo_cotizacion,$fecha) {
        $arreglo_cotizacion[1]=str_replace(",", ".", $arreglo_cotizacion[1]);
        //$sql="('".implode("',", $arreglo_cotizacion).",'2011-09-19')";
        $sql="('".implode("',", $arreglo_cotizacion).",'$fecha')";
        return $sql;
    }
    static function JugadoresxJuego($idjuego) {
        $sql="select jj.idjugador_x_juego, jj.idjuego, jj.idjugador, jj.estado, jj.monto_disponible, jj.rentabilidad,
            j.nombre, j.ap_paterno, j.ap_materno, j.mail
        from jugador_x_juego jj left join jugador j on j.idjugador=jj.idjugador where jj.idjuego=$idjuego ";
        if (isset($_REQUEST['nombre']))
            $sql.=" and nombre like '%".mysql_escape_string($_REQUEST['nombre'])."%'";
        if (isset($_REQUEST['apellidos']))
            $sql.=" and (ap_materno like '%".mysql_escape_string($_REQUEST['apellidos'])."%'
                or ap_materno like '%".mysql_escape_string($_REQUEST['apellidos'])."%')";
        if (isset($_REQUEST['estado']) and $_REQUEST['estado']!="")
            $sql.=" and jj.estado = '".mysql_escape_string($_REQUEST['estado'])."'";
            
        return $sql;
    }
    static function tickerRegistrado($ticker) {
        $sql="select idaccion from accion where ticker='".mysql_escape_string($ticker)."'";
        return BD::ejecutarQuerySelectUnitario($sql);

    }
    static function rellenaCotizaciones($fecha){
        $query="select a.ticker from accion a  left join cotizacion c on c.ticker=a.ticker and
            c.fecha='$fecha'  where a.estado='activo' and c.valor is null";
//        $query="select a.ticker from accion a  left join cotizacion c on c.ticker=a.ticker and
//            c.fecha='2011-09-19'  and c.valor is null where a.estado='activo'";
        $tickers=BD::ejecutarQuerySelect($query);
        
        $query="insert into cotizacion (valor,fecha,ticker) values ";
        foreach($tickers as $key=>$ticker)
        {
            if ($key!=0)
                $query.=",";

            //$query.="((select c.valor from cotizacion c where c.ticker='".$ticker['ticker']."' order by fecha desc limit 1),'2011-09-19','".$ticker['ticker']."')";

            $query.="((select c.valor from cotizacion c where c.ticker='".$ticker['ticker']."' order by fecha desc limit 1),'$fecha','".$ticker['ticker']."')";

        }
        
        BD::ejecutarQuerySimple($query);
    }
    static function borrarCotizacionesHoy($fecha){
        $query="delete from cotizacion where fecha='$fecha'";
        BD::ejecutarQuerySimple($query);

    }
    static function cargarCotizaciones($fecha) {
        
        $tickers_NoAgregados=array();
        if (file_exists($_FILES["archivo"]["tmp_name"])) {
            $arreglo=CSV_to_array($_FILES["archivo"]["tmp_name"]);
            if (!$arreglo) return false;
            self::borrarCotizacionesHoy($fecha);
            $insert="insert into cotizacion (ticker, valor, fecha)
        values ";
           
            foreach( $arreglo as $key=>$cotizacion) {
                if ($key!=0) {
                    if (Juego::tickerRegistrado($cotizacion[0])) {
                        $insert.=self::obtenerInsertCotizacion($cotizacion, $fecha);
                        if ($key!=count($arreglo)-1)
                            $insert.=",";
                    }
                    else $tickers_NoAgregados[]=$cotizacion[0];
                }
            }
                
                BD::ejecutarQueryInsert($insert);
            self::rellenaCotizaciones($fecha);
            return $tickers_NoAgregados;
        }
        return false;
    }
    static function obtenerRankingActual($idjuego) {
        $sql="SELECT j.idjugador, j.nombre, j.ap_paterno, j.ap_materno, j.mail, jj.idjugador_x_juego,

COALESCE(round(((
                        sum(c.num_acciones * (CASE  WHEN  c.moneda='dolar' THEN tipo_cambio  else 1 end) * cot.valor) + jj.monto_disponible - juego.monto_inicial)/juego.monto_inicial)*100,3),0)
as rentabilidad,
round(coalesce(round(sum(c.num_acciones * (CASE  WHEN  c.moneda='dolar' THEN tipo_cambio  else 1 end) * cot.valor),2),0) + jj.monto_disponible,2) as monto_total
            FROM jugador_x_juego jj
            LEFT JOIN cartera c ON jj.idjugador_x_juego = c.idjugador_x_juego
            LEFT JOIN cotizacion cot ON cot.ticker = c.ticker AND cot.fecha = (select max(c2.fecha) from cotizacion c2)
            LEFT JOIN juego ON juego.idjuego=jj.idjuego
            left join jugador j on j.idjugador=jj.idjugador
            WHERE jj.idjuego =".mysql_escape_string($idjuego)." and jj.estado='inscrito'
            GROUP BY jj.idjugador_x_juego
        order by rentabilidad desc,  monto_total desc  ";

//        $sql="SELECT j.idjugador, j.nombre, j.ap_paterno, j.ap_materno, j.mail, jj.idjugador_x_juego,
//
//round((coalesce(sum(c.num_acciones * cot.valor),0)+ jj.monto_disponible-juego.monto_inicial)/juego.monto_inicial*100,3)
//as rentabilidad,
//               jj.monto_disponible, round(coalesce(round(sum(c.num_acciones * cot.valor),2),0) + jj.monto_disponible,2) as monto_total
//            FROM jugador_x_juego jj
//            LEFT JOIN cartera c ON jj.idjugador_x_juego = c.idjugador_x_juego
//            LEFT JOIN cotizacion cot ON cot.ticker = c.ticker AND cot.fecha = '2011-06-12'
//            LEFT JOIN juego ON juego.idjuego=jj.idjuego
//            left join jugador j on j.idjugador=jj.idjugador
//            WHERE jj.idjuego =$idjuego
//
//            GROUP BY jj.idjugador_x_juego
//        order by rentabilidad desc, monto_total desc ";

        return $sql;
    }
    static function obtenerRanking($idjuego) {
         $sql="SELECT j.idjugador, j.nombre, j.ap_paterno, j.ap_materno, j.mail, jj.idjugador_x_juego,

COALESCE(round(((
                        sum(c.num_acciones * (CASE  WHEN  c.moneda='dolar' THEN tipo_cambio  else 1 end) * cot.valor) + jj.monto_disponible - juego.monto_inicial)/juego.monto_inicial)*100,3),0)
as rentabilidad,
round(coalesce(round(sum(c.num_acciones * (CASE  WHEN  c.moneda='dolar' THEN tipo_cambio  else 1 end) * cot.valor),2),0) + jj.monto_disponible,2) as monto_total
            FROM jugador_x_juego jj
            LEFT JOIN cartera c ON jj.idjugador_x_juego = c.idjugador_x_juego
            LEFT JOIN cotizacion cot ON cot.ticker = c.ticker AND cot.fecha = (select max(c2.fecha) from cotizacion c2)
            LEFT JOIN juego ON juego.idjuego=jj.idjuego
            left join jugador j on j.idjugador=jj.idjugador
            WHERE jj.idjuego =".mysql_escape_string($idjuego)." and jj.estado='inscrito'
            GROUP BY jj.idjugador_x_juego
        order by rentabilidad desc,  monto_total desc   ";
        return BD::ejecutarQuerySelect($sql);
    }
    static function obtenerQueryRankingAntiguo($idjuego) {
         $sql="SELECT j.idjugador, j.nombre, j.ap_paterno, j.ap_materno, j.mail, jj.idjugador_x_juego,
               coalesce(round(jj.rentabilidad,2),0) as 'rentabilidad',
        coalesce(round(jj.monto_total,2),0) as 'monto_total'
            FROM jugador_x_juego jj
            left join jugador j on j.idjugador=jj.idjugador
            WHERE jj.idjuego =".mysql_escape_string($idjuego)." and jj.estado='inscrito'
            GROUP BY jj.idjugador_x_juego
        order by 7 desc,  8 desc ";
         
        return $sql;
    }
    static function obtenerRankingAntiguo($idjuego) {
         $sql="SELECT j.idjugador, j.nombre, j.ap_paterno, j.ap_materno, j.mail, jj.idjugador_x_juego,
               coalesce(round(jj.rentabilidad,2),0) as 'rentabilidad',
        coalesce(round(jj.monto_total,2),0) as 'monto_total' 
            FROM jugador_x_juego jj
            left join jugador j on j.idjugador=jj.idjugador
            WHERE jj.idjuego =".mysql_escape_string($idjuego)."  and jj.estado='inscrito'
            GROUP BY jj.idjugador_x_juego
        order by 7 desc,  8 desc ";
        return BD::ejecutarQuerySelect($sql);
    }
    static function obtenerMail($idjugadorxjuego){
        $sql="select mail, concat(nombre, ' ', ap_paterno) as nombre 
        from jugador j, jugador_x_juego jj where j.idjugador=jj.idjugador and 
        jj.idjugador_x_juego=".mysql_escape_string($idjugadorxjuego);
        $return=BD::ejecutarQuerySelectUnitario($sql);
        
        return $return;
    }
    static function obtenerMailsJugadoresPendientes($idjuego){
        $sql="select mail
        from jugador j, jugador_x_juego jj where j.idjugador=jj.idjugador and
        jj.estado='pendiente' and
        jj.idjuego=".mysql_escape_string($idjuego);
        $return=BD::ejecutarQuerySelect($sql);
        $mails="";
        foreach($return as $mail)
        {
            if ($mails!="")
                $mails.=", ".trim($mail['mail']);
            else
                $mails=trim($mail['mail']);
        }
        return $mails;
    }
    static function InscribirJugador($idjugador, $idjuego){
        $juego=Juego::verJuego($idjuego);
       
        if (!Juego::jugadorInscrito($idjugador,$idjuego))
        {
            $sql="insert into jugador_x_juego (idjuego, idjugador, monto_disponible, rentabilidad, estado) values ";
            $sql.="(".$idjuego.",".$idjugador.",".$juego['monto_inicial'].",0,'pendiente')";
            BD::ejecutarQuerySimple($sql);
        }
        return $juego;
    }
    static function InscribirJugadores($idjuego) {
        $emails=array();
        if(isset($_REQUEST['ids'])) {
            foreach($_REQUEST['ids'] as $id) {
                $sql="update jugador_x_juego set estado='inscrito' where idjugador_x_juego=$id";
                BD::ejecutarQuerySimple($sql);
                $emails[]=self::obtenerMail($id);
            }
        }
        return $emails;
    }
    static function DesinscribirJugadores($idjuego) {
        if(isset($_REQUEST['ids'])) {
            foreach($_REQUEST['ids'] as $id) {
                $sql="update jugador_x_juego set estado='pendiente' where idjugador_x_juego=$id";
                BD::ejecutarQuerySimple($sql);
            }
        }
    }
    static function BorrarJugadores($idjuego) {
        if(isset($_REQUEST['ids'])) {
            foreach($_REQUEST['ids'] as $id) {
                $sql="delete from jugador_x_juego where idjugador_x_juego=$id";
                BD::ejecutarQuerySimple($sql);
            }
        }
    }
    
    static function consolidaRankingJugadores($idjuego){
         $sql="SELECT j.idjugador, j.nombre, j.ap_paterno, j.ap_materno, j.mail, jj.idjugador_x_juego,

COALESCE(round(((
                        sum(c.num_acciones * (CASE  WHEN  c.moneda='dolar' THEN tipo_cambio  else 1 end) * cot.valor) + jj.monto_disponible - juego.monto_inicial)/juego.monto_inicial)*100,3),0)
as rentabilidad,
round(
        coalesce(
        round(sum(c.num_acciones * (CASE  WHEN  c.moneda='dolar' THEN tipo_cambio  else 1 end) * cot.valor),2)*(1-(juego.porcentaje_venta/100)),0
        ) + jj.monto_disponible,2) as monto_total
            FROM jugador_x_juego jj
            LEFT JOIN cartera c ON jj.idjugador_x_juego = c.idjugador_x_juego
            LEFT JOIN cotizacion cot ON cot.ticker = c.ticker AND cot.fecha = (select max(c2.fecha) from cotizacion c2)
            LEFT JOIN juego ON juego.idjuego=jj.idjuego
            left join jugador j on j.idjugador=jj.idjugador
            WHERE jj.idjuego =$idjuego and jj.estado='inscrito'
            GROUP BY jj.idjugador_x_juego
        order by rentabilidad desc,  monto_total desc ";
        $jugadores= BD::ejecutarQuerySelect($sql);
        foreach($jugadores as $jugador )
            {
            
                $sql="update jugador_x_juego set rentabilidad=".$jugador['rentabilidad'].
            ", monto_total=".$jugador['monto_total'].
            " where idjugador_x_juego=".$jugador['idjugador_x_juego'];
                BD::ejecutarQuerySimple($sql);
            }

    }
    static function jugadorInscrito($idjugador,$idjuego) {
        $query="select idjugador_x_juego from jugador_x_juego where idjuego='$idjuego' and idjugador='$idjugador'";
        $resultado=BD::ejecutarQuerySelect($query);
        return count($resultado)!=0;



    }
    static function InscribirJugadoresPendiente($idjuego) {
        $juego=Juego::verJuego($idjuego);
        $sql="insert into jugador_x_juego (idjuego, idjugador, monto_disponible, rentabilidad, estado) values ";
        if(isset($_REQUEST['ids'])) {
            foreach($_REQUEST['ids'] as $id) {
                if (!Juego::jugadorInscrito($id,$idjuego))
                    $sql.="(".$idjuego.",".$id.",".$juego['monto_inicial'].",0,'pendiente'),";
            }
            $sql[strlen($sql)-1]=" ";

            BD::ejecutarQuerySimple($sql);
        }
    }
    static function opcionesJuegosxJugador($idjuego) {
        $sql="select jj.idjugador_x_juego, j.nombre
             from jugador_x_juego jj
        left join juego j on j.idjuego=jj.idjuego
        where jj.idjugador=$idjuego and jj.estado='inscrito'";
        $resultado=BD::ejecutarQuerySelect($sql);

        foreach($resultado as $juego) {
            $return.="<option value='".$juego['idjugador_x_juego']."' label='".$juego['nombre']."'>".$juego['nombre']."</option>";
        }
        return $return;

    }
    static function opcionesJuegosxJugadorAnterior($idjugador) {
        $sql="select jj.idjuego, j.nombre
             from jugador_x_juego jj
        right join juego j on j.idjuego=jj.idjuego and (j.estado='terminado' or j.estado='activo')
        where jj.idjugador=$idjugador and jj.estado='inscrito'";
        
        $resultado=BD::ejecutarQuerySelect($sql);

        foreach($resultado as $juego) {
            $return.="<option value='".$juego['idjuego']."' label='".$juego['nombre']."' ";
            if (isset($_REQUEST['idjuego']) and $_REQUEST['idjuego']==$juego['idjuego'])
                $return.=" selected='selected' ";
            $return.="> ".$juego['nombre']."</option>";
        }
        return $return;

    }

}
?>
